package com.itany.nmms.service;

import com.github.pagehelper.PageInfo;
import com.itany.nmms.entity.Dept;
import com.itany.nmms.entity.Staff;
import com.itany.nmms.exception.*;

import java.util.List;

/**
 * @author 石小俊
 * @date 2024年05月15日 18:08
 */
public interface DeptService {

    /**
     * 添加一级部门
     * @param name
     * @param remark
     * @param staff
     */
    void addFatherDept(String name, String remark, Staff staff) throws LoginDisabledException, RequestParameterErrorException, DeptExistException, ServiceException;

    /**
     * 添加指定部门下的子部门
     * @param fatherId
     * @param name
     * @param remark
     * @param staff
     */
    void addSonDept(String fatherId,String name, String remark, Staff staff) throws LoginDisabledException, RequestParameterErrorException, DeptExistException, ServiceException;

    /**
     * 分页查询部门信息
     * @param pageNo
     * @param pageSize
     * @return
     */
    PageInfo<Dept> findPage(String pageNo,String pageSize) throws ServiceException;

    /**
     * 修改设置默认值
     * @param id
     * @return
     */
    Dept findById(String id) throws RequestParameterErrorException, ServiceException;

    /**
     * 修改部门信息
     * @param id
     * @param name
     * @param remark
     */
    void modifyDept(String id,String name,String remark) throws RequestParameterErrorException, DeptExistException, ServiceException;

    /**
     * 启用部门,只能启用上级部门状态为有效的部门
     * @param id
     */
    void enableDept(String id) throws RequestParameterErrorException, DeptStatusException, ServiceException;

    /**
     * 禁用部门,禁用部门的同时需要将该部门下的所有子孙部门全部禁用
     * @param id
     */
    void disableDept(String id) throws RequestParameterErrorException, ServiceException;

    /**
     * 查询所有部门
     * @return
     */
    List<Dept> findAll() throws ServiceException;
}
